﻿using System;
using System.ComponentModel;
using System.Collections.Generic;
using System.Runtime.Serialization;
using Sinacor.Infra.UI.Common;
using Sinacor.Infra.Common.Exceptions;
using Sinacor.UI.Bovespa.Ordens.Model;
using Sinacor.UI.Bovespa.Ordens.Communication;
using Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Titulo.Titulo;
using Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Negocio;
using Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Ordem;
using Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Calendario.Calendario;
using System.Windows;
using Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Operador.Operador;
//using Sinacor.Infra.UI.Managers;

namespace Sinacor.UI.Bovespa.Ordens.Presenter
{

    public class CadastramentoNegocioPresenter : BasePresenter<ICadastramentoNegocio>
    {
        #region Construtor
        public CadastramentoNegocioPresenter(ICadastramentoNegocio view)
            : base(view)
        {
            this._view = view;
        }
        #endregion

        #region Variaveis de classe

        private Clientes.Communication.Cliente _communicationCliente;
        private Sinacor.UI.Bovespa.Ordens.Communication.Operador _communicationOperador;
        private Sinacor.UI.Bovespa.Ordens.Communication.Calendario _comunnicationCalendario;
        private Sinacor.UI.Bovespa.Ordens.Communication.Ordem _comunnicationOrdem;
        private Sinacor.UI.Bovespa.Ordens.Communication.Negocio _comunnicationNegocio;
        private Sinacor.UI.Bovespa.Ordens.Communication.Titulo _comunnicationTitulo;
        private ICadastramentoNegocio _view;
        private string _moduleID;

        public string ModuleID
        {
            get { return _moduleID; }
            set { _moduleID = value; }
        }

        #endregion

        #region Propriedades

        /// <summary>
        /// Negócio que está sendo editado no formulário
        /// </summary>
        private Model.ModelCadastroNegocio _negocioAtual;
        public Model.ModelCadastroNegocio NegocioAtual
        {
            get
            {
                return _negocioAtual;
            }
            set
            {
                _negocioAtual = value;
            }
        }
        
        #endregion

        #region Carregar Negocios

        /// <summary>
        ///     Carregar Negocios
        /// </summary>
        /// <param name="model"></param>
        /// <user>jrimes</user>
        public void CarregarNegocios(ModelCadastroNegocio model)
        {
            List<NegocioResponse> retorno = null;
            ConsultarNegociosRequest request = null;
            List<ModelCadastroNegocio> listaNegocios = null;

            try
            {
                //verificar se algum campo foi informado para o filtro dos dados 
                //if (CompararNegocios(model, new ModelCadastroNegocio(), false))
                //{
                //    this._view.InformarFiltroNaoInformado();
                //    return;
                //}

                this._comunnicationNegocio = new Sinacor.UI.Bovespa.Ordens.Communication.Negocio(this.Session);

                request = new ConsultarNegociosRequest();
                request.DataMovimento = model.DataMovimento;
                request.Bolsa = model.Bolsa;
                request.DataPregao = model.DataPregao;
                request.HoraNegocio = model.HoraNegocio;

                if (model.TipoNaturezaOperacao.HasValue)
                {
                    switch (model.TipoNaturezaOperacao)
                    {
                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoNaturezaOperacao.Compra:
                            request.TipoNaturezaOperacao = Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Negocio.TipoNaturezaOperacao.Compra;
                            break;
                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoNaturezaOperacao.Venda:
                            request.TipoNaturezaOperacao = Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Negocio.TipoNaturezaOperacao.Venda;
                            break;
                    }
                }

                request.NumeroNegocio = model.Numero;
                request.DigitoNegocio = model.NumeroDigito;
                request.ContraParte = model.ContraParte;

                if (model.Mercado != null)
                {
                    //request.TipoMercado = model.Mercado.Value.Value;

                    switch (model.Mercado.Value)
                    {
                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoMercado.Vista:
                            request.TipoMercado = Communication.Bovespa.Ordens.Negocio.TipoMercado.Vista;
                            break;
                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoMercado.Fracionario:
                            request.TipoMercado = Communication.Bovespa.Ordens.Negocio.TipoMercado.Fracionario;
                            break;
                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoMercado.ExercicioOpcaoCompra:
                            request.TipoMercado = Communication.Bovespa.Ordens.Negocio.TipoMercado.ExercicioOpcaoCompra;
                            break;
                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoMercado.ExercicioOpcaoVenda:
                            request.TipoMercado = Communication.Bovespa.Ordens.Negocio.TipoMercado.ExercicioOpcaoVenda;
                            break;
                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoMercado.OpcaoCompra:
                            request.TipoMercado = Communication.Bovespa.Ordens.Negocio.TipoMercado.OpcaoCompra;
                            break;
                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoMercado.OpcaoVenda:
                            request.TipoMercado = Communication.Bovespa.Ordens.Negocio.TipoMercado.OpcaoVenda;
                            break;
                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoMercado.Estruturado:
                            request.TipoMercado = Communication.Bovespa.Ordens.Negocio.TipoMercado.Estruturado;
                            break;
                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoMercado.LeilaoNaoCotados:
                            request.TipoMercado = Communication.Bovespa.Ordens.Negocio.TipoMercado.LeilaoNaoCotados;
                            break;
                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoMercado.Termo:
                            request.TipoMercado = Communication.Bovespa.Ordens.Negocio.TipoMercado.Termo;
                            break;
                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoMercado.VencimentoFuturo:
                            request.TipoMercado = Communication.Bovespa.Ordens.Negocio.TipoMercado.VencimentoFuturo;
                            break;
                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoMercado.Leilao:
                            request.TipoMercado = Communication.Bovespa.Ordens.Negocio.TipoMercado.Leilao;
                            break;
                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoMercado.Futuro:
                            request.TipoMercado = Communication.Bovespa.Ordens.Negocio.TipoMercado.Futuro;
                            break;
                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoMercado.BOX:
                            request.TipoMercado = Communication.Bovespa.Ordens.Negocio.TipoMercado.BOX;
                            break;
                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoMercado.IntegralizacaoResgateCotas:
                            request.TipoMercado = Communication.Bovespa.Ordens.Negocio.TipoMercado.IntegralizacaoResgateCotas;
                            break;
                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoMercado.CotasETF:
                            request.TipoMercado = Communication.Bovespa.Ordens.Negocio.TipoMercado.CotasETF;
                            break;
                    }
                }

                if (model.TipoTermo != null)
                {
                    switch (model.TipoTermo)
                    {
                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoTermo.AcordoMutuo:
                            request.TipoTermo = Communication.Bovespa.Ordens.Negocio.TipoTermo.AcordoMutuo;
                            break;
                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoTermo.VontadeComprador:
                            request.TipoTermo = Communication.Bovespa.Ordens.Negocio.TipoTermo.VontadeComprador;
                            break;
                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoTermo.VontadeVendedor:
                            request.TipoTermo = Communication.Bovespa.Ordens.Negocio.TipoTermo.VontadeVendedor;
                            break;
                    }
                }

                request.Titulo = new Communication.Bovespa.Ordens.Negocio.TituloRequest(); // 13/02/2008 - alterado - diogo milanez
                request.Titulo.Codigo = model.TituloCodigo;
                request.Titulo.DataPregao = model.DataPregao;
                request.Titulo.FatorCotacao = model.FatorCotacao;//20080412 12:08 - Alterado - DMilanez.7Comm
                request.Titulo.DiasLiquidacao = model.DiasLiquidacao;

                if (model.PrazoTermo != null)
                    request.PrazoTermo = model.PrazoTermo;

                request.VencimentoOpcoesTermo = model.VencimentoTermoOpcoes;
                request.TituloObjeto = model.TituloObjeto;
                request.Quantidade = model.Quantidade;
                request.Preco = model.Preco;

                request.PontaGeradoraOferta = model.PontaGeradoraOferta;
                request.NaoLiquidaNota = model.NaoLiquidaNota;
                request.NegociadoAfterMarket = model.NegociadoAfterMarket;

                request.Observacao = model.Observacao;
                request.CodigoCorrespondente = model.CodigoCorrespondente;
                request.PercentualCorrespondente = model.PercentualCorrespondente;

                if (model.TipoOrigem.HasValue)
                {
                    switch (model.TipoOrigem)
                    {
                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoOrigemNegocio.HomeBroker:
                            request.TipoOrigem = Communication.Bovespa.Ordens.Negocio.TipoOrigemNegocio.HomeBroker;
                            break;
                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoOrigemNegocio.MegaBolsa:
                            request.TipoOrigem = Communication.Bovespa.Ordens.Negocio.TipoOrigemNegocio.MegaBolsa;
                            break;
                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoOrigemNegocio.VivaVoz:
                            request.TipoOrigem = Communication.Bovespa.Ordens.Negocio.TipoOrigemNegocio.VivaVoz;
                            break;
                    }
                }

                if (model.TipoLiquidacaoNegocio.HasValue)
                {
                    switch (model.TipoLiquidacaoNegocio)
                    {
                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoLiquidacaoNegocio.LiquidacaoPeloBruto:
                            request.TipoLiquidacao = Communication.Bovespa.Ordens.Negocio.TipoLiquidacaoNegocio.LiquidacaoPeloBruto;
                            break;
                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoLiquidacaoNegocio.LiquidacaoPeloLiquido:
                            request.TipoLiquidacao = Communication.Bovespa.Ordens.Negocio.TipoLiquidacaoNegocio.LiquidacaoPeloLiquido;
                            break;
                    }
                }

                if (model.TipoOfertaBovespaFix.HasValue)
                {
                    switch (model.TipoOfertaBovespaFix)
                    {
                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoOfertaBovespaFix.AgressorLancador:
                            request.TipoOfertaBovespaFix = Communication.Bovespa.Ordens.Negocio.TipoOfertaBovespaFix.AgressorLancador;
                            break;
                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoOfertaBovespaFix.Balcao:
                            request.TipoOfertaBovespaFix = Communication.Bovespa.Ordens.Negocio.TipoOfertaBovespaFix.Balcao;
                            break;
                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoOfertaBovespaFix.Direto:
                            request.TipoOfertaBovespaFix = Communication.Bovespa.Ordens.Negocio.TipoOfertaBovespaFix.Direto;
                            break;
                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoOfertaBovespaFix.Tomador:
                            request.TipoOfertaBovespaFix = Communication.Bovespa.Ordens.Negocio.TipoOfertaBovespaFix.Tomador;
                            break;
                    }
                }

                if (model.TipoEstrategia.HasValue)
                {
                    switch (model.TipoEstrategia)
                    {
                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoEstrategia.BOX:
                            request.Estrategia = Communication.Bovespa.Ordens.Negocio.TipoEstrategia.BOX;
                            break;
                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoEstrategia.DBX:
                            request.Estrategia = Communication.Bovespa.Ordens.Negocio.TipoEstrategia.DBX;
                            break;
                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoEstrategia.Nenhuma:
                            request.Estrategia = null;
                            break;
                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoEstrategia.POP:
                            request.Estrategia = Communication.Bovespa.Ordens.Negocio.TipoEstrategia.POP;
                            break;

                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoEstrategia.BTF:
                            request.Estrategia = Communication.Bovespa.Ordens.Negocio.TipoEstrategia.BTF;
                            break;

                        //Estrategia TVR
                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoEstrategia.TVR:
                            request.Estrategia = Communication.Bovespa.Ordens.Negocio.TipoEstrategia.TVR;
                            break;
                    }
                }

                retorno = this._comunnicationNegocio.ConsultarNegocios(request);

                listaNegocios = new List<ModelCadastroNegocio>();

                /// Data:12/05/2008 20:16
                /// Autor:CPimentel
                /// Obs: REMOVIDO DA PARTE DE BAIXO ESTE BLOCO DEVIVO A MENSAGEM DE NAO ENCONTRADO QUE SEMPRE ERA APRESENTADA.
                if (retorno != null && retorno.Count > 0)
                {
                    foreach (NegocioResponse item in retorno)
                    {
                        ModelCadastroNegocio newModel;

                        newModel = ConverterNegocioResponseParaModelCadastroNegocio(item);

                        listaNegocios.Add(newModel);
                    }
                    this._view.ExibirDadosNegocio(listaNegocios);
                }
                else
                    this._view.InformarPesquisaSemResultado();
            }
            catch (Exception ex)
            {
                HandleException(ex);
            }

            //CEZAR - ESTE TRECHO FOI MOVIDO PARA CIMA POIS SEMPRE APRESENTAVA MENSAGEM DE REGISTRO NAO ENCONTRADO
            //MESMO QUANDO CAIU EM EXCECAO;
        }

        #endregion

        #region Carregar Titulos

        /// <summary>
        ///     Carregar Titulos
        /// 20080412 17:18 - Renomeado - DMilanez.7Comm
        /// </summary>
        /// <param name="model"></param>
        /// <user>jrimes</user>
        public void CarregarTitulo(Model.Titulo model) //renomedo de ModelTitulos para ModelTitulo - esertorio - 200803202033 - ref issue ID0001213
        {
            Model.Titulo retorno = null; //incluido - esertorio - 200803251516 - ref issue ID0001485

            try
            {
                //20080412 17:23 - Alterado - DMilanez.7Comm
                if (!model.DataPregao.HasValue || String.IsNullOrEmpty(model.Codigo))
                {
                    return;//n faz nada caso n seja informado o filtro obrigatorio
                }

                this._comunnicationTitulo = new Sinacor.UI.Bovespa.Ordens.Communication.Titulo(this.Session);
                //20080412 17:19 - Alterado para consumir operacao que retorna apenas um titulo- DMilanez.7Comm
                retorno = this._comunnicationTitulo.ConsultarTituloCodigo(model); //alterada entrada de ConsultarTitulosRequest para ModelTitulo - esertorio - 200803251504 - ref issue ID0001485
            }

            catch (Exception ex)
            {
                HandleException(ex);
            }

            if (retorno != null)
            {
                this._view.ExibirTitulo(retorno); //alterada entrada para ModelTitulo - esertorio - 200803251514 - ref issue ID0001485
            }
            else
            {
                this._view.InformarTituloNaoEncontrado();
            }
        }

        #endregion

        #region Carregar Mercado

        /// <summary>
        ///     Carregar combo Mercado
        /// </summary>
        /// <user>jrimes</user>
        public void CarregarMercado()
        {
            //List<MercadoResponse> retorno = null; //excluido - esertorio - 200803251834 - ref issue ID0001111
            List<Model.Mercado> retornoModel = null;
            //ModelMercado modelMercado = null; //excluido - esertorio - 200803251834 - ref issue ID0001111

            try
            {
                this._comunnicationOrdem = new Sinacor.UI.Bovespa.Ordens.Communication.Ordem(this.Session);
                retornoModel = this._comunnicationOrdem.ConsultarMercado();//alterado retorno para ModelMercado - esertorio - 200803251834 - ref issue ID0001111
            }

            catch (Exception ex)
            {
                HandleException(ex);
            }

            if (retornoModel != null && retornoModel.Count > 0)
            {
                //20080402 15:00 - Alterado - DMilanez.7Comm
                //INI
                //List<ModelAuxiliar> lstCombo = new List<ModelAuxiliar>();
                //ModelAuxiliar item = null;

                //foreach (ModelMercado itemResponse in retornoModel)
                //{
                //    item = new ModelAuxiliar();
                //    item.TipoMercado = itemResponse.TipoMercado.ToString();
                //    lstCombo.Add(item);
                //}

                //this._view.ExibirMercado(retornoModel, lstCombo);
                //FIM
                this._view.ExibirMercado(retornoModel);
            }
        }

        #endregion

        #region Carregar Bolsa

        /// <summary>
        ///     Carregar combo Bolsa
        /// </summary>
        /// <user>jrimes</user>
        public void CarregarBolsa()
        {
            //20080403 10:57 - Alterado - DMilanez.7Comm
            List<Model.Bolsa> retorno = null;

            try
            {
                this._comunnicationNegocio = new Sinacor.UI.Bovespa.Ordens.Communication.Negocio(this.Session);
                retorno = this._comunnicationNegocio.ConsultarBolsas();
            }

            catch (Exception ex)
            {
                HandleException(ex);
            }

            if (retorno != null)
            {
                this._view.ExibirBolsas(retorno);
            }
            else
            {
                this._view.InformarNenhumaBolsaEncontra();
            }
        }

        #endregion

        #region Carregar Data Pregão

        /// <summary>
        ///     Carregar Data do Pregão
        /// </summary>
        /// <user>jrimes</user>
        public void CarregarDataPregao()
        {
            CalendarioResponse retorno = null;

            try
            {
                this._comunnicationCalendario = new Sinacor.UI.Bovespa.Ordens.Communication.Calendario(this.Session);
                retorno = this._comunnicationCalendario.ConsultarDataMovimento();
                
                if (retorno != null)
                {
                    this._view.ExibirDataPregao(retorno.DataPregao);
                }
            }

            catch (Exception ex)
            {
                HandleException(ex);
            }

            
        }

        #endregion

        #region Carregar Data Movimento

        public void CarregarDataMovimento()
        {
            try
            {
                Communication.ControleMovimentoOrdens communication = new ControleMovimentoOrdens(this.Session);                
                Model.InformacoesMovimento model = communication.ObterInformacoesMovimento(new Model.DataMovimento());
                
                if (model != null)
                {
                    this._view.ExibirDataMovimento(model.DataMovimento);
                }
            }
            catch (Exception ex)
            {
                HandleException(ex);
                throw;
            }
        }

        #endregion

        #region Excluir

        #region Excluir Negocio

        /// <summary>
        ///     Excluir
        /// </summary>
        /// <param name="model"></param>
        /// <user>jrimes</user>
        public void ExcluirNegocio(ModelCadastroNegocio model)
        {
            ExcluirNegocioRequest request;
            try
            {
                this._comunnicationNegocio = new Sinacor.UI.Bovespa.Ordens.Communication.Negocio(this.Session);
                request = new ExcluirNegocioRequest();

                request.Bolsa = model.Bolsa;
                request.CodigoTitulo = model.TituloCodigo;
                request.DataPregao = model.DataPregao;
                request.NumeroNegocio = model.Numero;
                switch (model.TipoNaturezaOperacao)
                {
                    case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoNaturezaOperacao.Compra:
                        request.TipoNaturezaOperacao = Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Negocio.TipoNaturezaOperacao.Compra;
                        break;
                    case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoNaturezaOperacao.Venda:
                        request.TipoNaturezaOperacao = Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Negocio.TipoNaturezaOperacao.Venda;
                        break;
                }

                if (this.ModuleID == "ORD")
                    this._comunnicationNegocio.ExcluirNegocioControleOrdens(request);
                else if (this.ModuleID == "BOL")
                    this._comunnicationNegocio.ExcluirNegocioFaturamentoBolsas(request);
            }

            catch (Exception ex)
            {
                HandleException(ex);
                return;
            }

            this._view.InformarNegocioExcluido(model);
        }

        #endregion

        //#region Excluir Negocio Grid

        ///// <summary>
        /////     Excluir Negocio Grid
        ///// 
        ///// Data:25/03/2008 17:47
        ///// Autor:DMilanez.7Comm
        ///// Obs: Alterado de forma a receber um binding list de ModelCadastroNegocio
        ///// </summary>
        ///// <param name="model"></param>
        ///// <user>jrimes</user>
        //public void ExcluirNegocio(List<object> lstExclusao)
        //{
        //    List<ModelCadastroNegocio> lstRetorno = new List<ModelCadastroNegocio>();
        //    try
        //    {
        //        this._comunnicationNegocio = new Negocio();
        //        ExcluirNegocioRequest request = null;

        //        //foreach (NegocioResponse item in lstExclusao)
        //        foreach (ModelCadastroNegocio item in lstExclusao)
        //        {
        //            lstRetorno.Add(item);

        //            request = new ExcluirNegocioRequest();

        //            request.Bolsa = item.Bolsa;
        //            request.CodigoTitulo = item.TituloCodigo;
        //            request.DataPregao = item.DataPregao;
        //            request.NumeroNegocio = item.Numero;

        //            switch (item.TipoNaturezaOperacao)
        //            {
        //                //case Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Negocio.TipoNaturezaOperacao.Compra:
        //                case Ordens.Model.TipoNaturezaOperacao.Compra:
        //                    request.TipoNaturezaOperacao = Ordens.Communication.Bovespa.Ordens.Negocio.TipoNaturezaOperacao.Compra;
        //                    break;
        //                //case Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Negocio.TipoNaturezaOperacao.Venda:
        //                case Ordens.Model.TipoNaturezaOperacao.Venda:
        //                    request.TipoNaturezaOperacao = Ordens.Communication.Bovespa.Ordens.Negocio.TipoNaturezaOperacao.Venda;
        //                    break;
        //            }

        //            this._comunnicationNegocio.ExcluirNegocio(request);
        //        }

        //    }
        //    catch (ClientException ex)
        //    {
        //        HandleException(ex);
        //        return;
        //    }
        //    catch (ClientValidationException ex)
        //    {
        //        HandleException(ex);
        //        return;
        //    }
        //    catch (ClientCommunicationException ex)
        //    {
        //        HandleException(ex);
        //        return;
        //    }
        //    catch (ClientGeneralException ex)
        //    {
        //        HandleException(ex);
        //        return;
        //    }
        //    catch (Exception ex)
        //    {
        //        HandleException(ex);
        //        return;
        //    }

        //    this._view.InformarNegociosExcluidos(lstRetorno);
        //}

        //#endregion

        #endregion

        #region Salvar

        #region Salvar Negocio Formulario

        /// <summary>
        ///     Salvar Negocio
        /// </summary>
        /// <param name="model"></param>
        /// <user>jrimes</user>
        public bool SalvarNegocio(ModelCadastroNegocio model)
        {
            if (!SalvarNegocio(model, true))
            {
                return false;
            }
            else
            {
                return true;
            }
        }
        private bool SalvarNegocio(ModelCadastroNegocio model, bool emitirAviso)
        {
            IncluirNegocioRequest request = null;
            NegocioResponse response = null;
            ModelCadastroNegocio modelCadNegocio = null;

            bool retorno = true;

            try
            {
                this._comunnicationNegocio = new Sinacor.UI.Bovespa.Ordens.Communication.Negocio(this.Session);
                request = new IncluirNegocioRequest();

                request.Bolsa = model.Bolsa;
                request.CodigoCorrespondente = model.CodigoCorrespondente;
                request.ContraParte = model.ContraParte;
                request.DataMovimento = model.DataMovimento;
                request.NumeroNegocio = model.Numero;
                request.DigitoNegocio = model.NumeroDigito;

                if (model.TipoEstrategia.HasValue)
                {
                    switch (model.TipoEstrategia)
                    {
                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoEstrategia.BOX:
                            request.Estrategia = Communication.Bovespa.Ordens.Negocio.TipoEstrategia.BOX;
                            break;
                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoEstrategia.DBX:
                            request.Estrategia = Communication.Bovespa.Ordens.Negocio.TipoEstrategia.DBX;
                            break;
                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoEstrategia.Nenhuma:
                            request.Estrategia = Communication.Bovespa.Ordens.Negocio.TipoEstrategia.Nenhuma;
                            break;
                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoEstrategia.POP:
                            request.Estrategia = Communication.Bovespa.Ordens.Negocio.TipoEstrategia.POP;
                            break;

                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoEstrategia.BTF:
                            request.Estrategia = Communication.Bovespa.Ordens.Negocio.TipoEstrategia.BTF;
                            break;
                        
                        //Estrategia TVR
                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoEstrategia.TVR:
                            request.Estrategia = Communication.Bovespa.Ordens.Negocio.TipoEstrategia.TVR;
                            break;
                    }
                }

                if (model.HoraNegocio != null && model.HoraNegocio != DateTime.MinValue)
                    request.HoraNegocio = model.HoraNegocio;

                request.NaoLiquidaNota = model.NaoLiquidaNota;
                request.NegociadoAfterMarket = model.NegociadoAfterMarket;
                request.Observacao = model.Observacao;
                request.PercentualCorrespondente = model.PercentualCorrespondente;
                request.PontaGeradoraOferta = model.PontaGeradoraOferta;
                if (model.PrazoTermo != null)
                    request.PrazoTermo = (int)model.PrazoTermo;

                request.Preco = model.Preco;
                request.Quantidade = model.Quantidade;
                if (model.TipoLiquidacaoNegocio.HasValue)
                {
                    switch (model.TipoLiquidacaoNegocio)
                    {
                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoLiquidacaoNegocio.LiquidacaoPeloLiquido:
                            request.TipoLiquidacao = Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Negocio.TipoLiquidacaoNegocio.LiquidacaoPeloLiquido;
                            break;
                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoLiquidacaoNegocio.LiquidacaoPeloBruto:
                            request.TipoLiquidacao = Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Negocio.TipoLiquidacaoNegocio.LiquidacaoPeloBruto;
                            break;
                    }
                }

                if (model.Mercado != null)
                {
                    switch (model.Mercado.Value)
                    {
                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoMercado.Vista:
                            request.TipoMercado = Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Negocio.TipoMercado.Vista;
                            break;
                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoMercado.Fracionario:
                            request.TipoMercado = Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Negocio.TipoMercado.Fracionario;
                            break;
                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoMercado.ExercicioOpcaoCompra:
                            request.TipoMercado = Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Negocio.TipoMercado.ExercicioOpcaoCompra;
                            break;
                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoMercado.ExercicioOpcaoVenda:
                            request.TipoMercado = Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Negocio.TipoMercado.ExercicioOpcaoVenda;
                            break;
                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoMercado.OpcaoCompra:
                            request.TipoMercado = Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Negocio.TipoMercado.OpcaoCompra;
                            break;
                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoMercado.OpcaoVenda:
                            request.TipoMercado = Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Negocio.TipoMercado.OpcaoVenda;
                            break;
                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoMercado.LeilaoNaoCotados:
                            request.TipoMercado = Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Negocio.TipoMercado.LeilaoNaoCotados;
                            break;
                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoMercado.Termo:
                            request.TipoMercado = Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Negocio.TipoMercado.Termo;
                            break;
                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoMercado.VencimentoFuturo:
                            request.TipoMercado = Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Negocio.TipoMercado.VencimentoFuturo;
                            break;
                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoMercado.Leilao:
                            request.TipoMercado = Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Negocio.TipoMercado.Leilao;
                            break;
                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoMercado.Futuro:
                            request.TipoMercado = Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Negocio.TipoMercado.Futuro;
                            break;
                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoMercado.Estruturado:
                            request.TipoMercado = Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Negocio.TipoMercado.Estruturado;
                            break;
                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoMercado.BOX:
                            request.TipoMercado = Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Negocio.TipoMercado.BOX;
                            break;
                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoMercado.IntegralizacaoResgateCotas:
                            request.TipoMercado = Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Negocio.TipoMercado.IntegralizacaoResgateCotas;
                            break;
                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoMercado.CotasETF:
                            request.TipoMercado = Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Negocio.TipoMercado.CotasETF;
                            break;
                    }
                }

                if (model.TipoOfertaBovespaFix != null)
                {
                    switch (model.TipoOfertaBovespaFix)
                    {
                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoOfertaBovespaFix.AgressorLancador:
                            request.TipoOfertaBovespaFix = Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Negocio.TipoOfertaBovespaFix.AgressorLancador;
                            break;
                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoOfertaBovespaFix.Balcao:
                            request.TipoOfertaBovespaFix = Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Negocio.TipoOfertaBovespaFix.Balcao;
                            break;
                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoOfertaBovespaFix.Direto:
                            request.TipoOfertaBovespaFix = Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Negocio.TipoOfertaBovespaFix.Direto;
                            break;
                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoOfertaBovespaFix.Tomador:
                            request.TipoOfertaBovespaFix = Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Negocio.TipoOfertaBovespaFix.Tomador;
                            break;
                    }
                }

                if (model.TipoOrigem != null)
                {
                    switch (model.TipoOrigem)
                    {
                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoOrigemNegocio.HomeBroker:
                            request.TipoOrigem = Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Negocio.TipoOrigemNegocio.HomeBroker;
                            break;
                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoOrigemNegocio.MegaBolsa:
                            request.TipoOrigem = Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Negocio.TipoOrigemNegocio.MegaBolsa;
                            break;
                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoOrigemNegocio.VivaVoz:
                            request.TipoOrigem = Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Negocio.TipoOrigemNegocio.VivaVoz;
                            break;
                    }
                }

                if (model.TipoTermo != null)
                {
                    switch (model.TipoTermo)
                    {
                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoTermo.AcordoMutuo:
                            request.TipoTermo = Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Negocio.TipoTermo.AcordoMutuo;
                            break;
                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoTermo.VontadeComprador:
                            request.TipoTermo = Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Negocio.TipoTermo.VontadeComprador;
                            break;
                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoTermo.VontadeVendedor:
                            request.TipoTermo = Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Negocio.TipoTermo.VontadeVendedor;
                            break;
                        default:
                            break;
                    }
                }

                request.CodigoTitulo = model.TituloCodigo;
                request.DataPregao = model.DataPregao;
                request.FatorValorizacao = model.FatorCotacao;
                request.DiasLiquidacao = model.DiasLiquidacao;
                request.DescricaoTitulo = model.TituloDescricao;
                request.EspecificacaoTitulo = model.TituloEspecificacao;

                request.TituloObjeto = model.TituloObjeto;
                if (model.VencimentoTermoOpcoes != DateTime.MinValue)
                    request.VencimentoOpcoesTermo = model.VencimentoTermoOpcoes;

                request.DataPregao = model.DataPregao;

                if (model.TipoNaturezaOperacao.HasValue)
                {
                    switch (model.TipoNaturezaOperacao)
                    {
                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoNaturezaOperacao.Compra:
                            request.TipoNaturezaOperacao = Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Negocio.TipoNaturezaOperacao.Compra;
                            break;
                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoNaturezaOperacao.Venda:
                            request.TipoNaturezaOperacao = Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Negocio.TipoNaturezaOperacao.Venda;
                            break;
                    }
                }

                if (model.TipoLiquidacaoNegocio.HasValue)
                {
                    switch (model.TipoLiquidacaoNegocio)
                    {
                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoLiquidacaoNegocio.LiquidacaoPeloLiquido:
                            request.TipoLiquidacao = Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Negocio.TipoLiquidacaoNegocio.LiquidacaoPeloLiquido; break;
                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoLiquidacaoNegocio.LiquidacaoPeloBruto:
                            request.TipoLiquidacao = Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Negocio.TipoLiquidacaoNegocio.LiquidacaoPeloBruto;
                            break;
                    }
                }

                /// Alterado de forma a verificar o sistema chamador
                if (this.ModuleID == "ORD")//20080327 10:09 - Alterado - DMilanez.7Comm
                    response = this._comunnicationNegocio.SalvarNegocioControleOrdens(request);
                else if (this.ModuleID == "BOL")//20080327 10:09 - Alterado - DMilanez.7Comm
                    response = this._comunnicationNegocio.SalvarNegocioFaturamentoBolsas(request);
                else
                    return true;


                modelCadNegocio = ConverterNegocioResponseParaModelCadastroNegocio(response);
                //modelCadNegocio.NegocioArmazenado = true;//20080328 10:36 - Alterado - DMilanez.7Comm

                if (emitirAviso)
                {
                    //this._view.ExibirDadosNegocio(modelCadNegocio);
                    this._view.InformarNegocioIncluido(modelCadNegocio);
                }

                
            }

            catch (BusinessException bx)
            {
                retorno = false;
                this._view.ShowError(bx);
            }
            catch (Exception ex)
            {
                retorno = false;
                base.HandleException(ex);
            }

            return retorno;

        }

        #endregion

        //#region Salvar Negocio Grid

        ///// <summary>
        /////     Salvar Negocio Grid
        ///// 
        ///// Data:13/02/2008 13:56
        ///// Autor:DMilanez.7Comm
        ///// Obs: adicao do parametro sistema chamador
        ///// 
        ///// Data:25/03/2008 17:51
        ///// Autor:DMilanez.7Comm
        ///// Obs: Alterado de forma a receber um binding list de ModelCadastroNegocio
        ///// </summary>
        ///// <param name="model"></param>
        ///// <user>jrimes</user>
        //public void SalvarNegocio(List<object> lstInclusao)
        //{
        //    List<ModelCadastroNegocio> lstRetorno = new List<ModelCadastroNegocio>();
        //    try
        //    {
        //        this._comunnicationNegocio = new Negocio();
        //        ModelCadastroNegocio negocioAlterado = null;

        //        foreach (ModelCadastroNegocio item in lstInclusao)
        //        {
        //            lstRetorno.Add(item);

        //            //negocioAlterado.ModuleID = moduleID;//20080327 10:09 - removido - DMilanez.7Comm
        //            SalvarNegocio(negocioAlterado, false);
        //        }

        //    }
        //    catch (ClientException ex)
        //    {
        //        HandleException(ex);
        //        throw;
        //    }
        //    catch (ClientValidationException ex)
        //    {
        //        HandleException(ex);
        //        throw;
        //    }
        //    catch (ClientCommunicationException ex)
        //    {
        //        HandleException(ex);
        //        throw;
        //    }
        //    catch (ClientGeneralException ex)
        //    {
        //        HandleException(ex);
        //        throw;
        //    }
        //    catch (Exception ex)
        //    {
        //        HandleException(ex);
        //        throw;
        //    }

        //    this._view.InformarNegociosIncluidos(lstRetorno);
        //}

        //#endregion

        #endregion

        #region Alterar

        #region Alterar Negocio Formulario

        /// <summary>
        ///     Alterar Negocio Formulario
        /// </summary>
        /// <param name="model"></param>
        /// <user>jrimes</user>
        public bool AlterarNegocio(ModelCadastroNegocio model)
        {
            if (!AlterarNegocio(model, true))
            {
                NegocioAtual = null;
                return false;
            }
            else
            {
                NegocioAtual = model;
                return true;
            }

        
        }
        private bool AlterarNegocio(ModelCadastroNegocio model, bool emitirAviso)
        {
            AlterarNegocioRequest request;
            NegocioResponse response = null;
            ModelCadastroNegocio modelCadNegocio = null;

            bool retorno = true;

            try
            {
                this._comunnicationNegocio = new Sinacor.UI.Bovespa.Ordens.Communication.Negocio(this.Session);
                request = new AlterarNegocioRequest();

                request.Bolsa = model.Bolsa;
                request.CodigoCorrespondente = model.CodigoCorrespondente;
                request.ContraParte = model.ContraParte;
                request.DataMovimento = model.DataMovimento;
                request.NumeroNegocio = model.Numero;
                request.DigitoNegocio = model.NumeroDigito;

                if (model.TipoEstrategia.HasValue)
                {
                    switch (model.TipoEstrategia)
                    {
                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoEstrategia.BOX:
                            request.Estrategia = Communication.Bovespa.Ordens.Negocio.TipoEstrategia.BOX;
                            break;
                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoEstrategia.DBX:
                            request.Estrategia = Communication.Bovespa.Ordens.Negocio.TipoEstrategia.DBX;
                            break;
                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoEstrategia.Nenhuma:
                            request.Estrategia = Communication.Bovespa.Ordens.Negocio.TipoEstrategia.Nenhuma;
                            break;
                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoEstrategia.POP:
                            request.Estrategia = Communication.Bovespa.Ordens.Negocio.TipoEstrategia.POP;
                            break;

                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoEstrategia.BTF:
                            request.Estrategia = Communication.Bovespa.Ordens.Negocio.TipoEstrategia.BTF;
                            break;

                        //Estrategia TVR
                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoEstrategia.TVR:
                            request.Estrategia = Communication.Bovespa.Ordens.Negocio.TipoEstrategia.TVR;
                            break;
                    }
                }

                if (model.HoraNegocio != DateTime.MinValue)
                    request.HoraNegocio = model.HoraNegocio;

                request.NaoLiquidaNota = model.NaoLiquidaNota;
                request.NegociadoAfterMarket = model.NegociadoAfterMarket;
                request.Observacao = model.Observacao;
                request.PercentualCorrespondente = model.PercentualCorrespondente;
                request.PontaGeradoraOferta = model.PontaGeradoraOferta;
                if (model.PrazoTermo != null)
                    request.PrazoTermo = (int)model.PrazoTermo;

                request.Preco = model.Preco;
                request.Quantidade = model.Quantidade;

                if (model.Mercado != null)
                {
                    switch (model.Mercado.Value)
                    {
                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoMercado.Vista:
                            request.TipoMercado = Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Negocio.TipoMercado.Vista;
                            break;
                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoMercado.Fracionario:
                            request.TipoMercado = Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Negocio.TipoMercado.Fracionario;
                            break;
                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoMercado.ExercicioOpcaoCompra:
                            request.TipoMercado = Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Negocio.TipoMercado.ExercicioOpcaoCompra;
                            break;
                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoMercado.ExercicioOpcaoVenda:
                            request.TipoMercado = Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Negocio.TipoMercado.ExercicioOpcaoVenda;
                            break;
                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoMercado.OpcaoCompra:
                            request.TipoMercado = Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Negocio.TipoMercado.OpcaoCompra;
                            break;
                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoMercado.OpcaoVenda:
                            request.TipoMercado = Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Negocio.TipoMercado.OpcaoVenda;
                            break;
                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoMercado.LeilaoNaoCotados:
                            request.TipoMercado = Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Negocio.TipoMercado.LeilaoNaoCotados;
                            break;
                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoMercado.Termo:
                            request.TipoMercado = Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Negocio.TipoMercado.Termo;
                            break;
                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoMercado.VencimentoFuturo:
                            request.TipoMercado = Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Negocio.TipoMercado.VencimentoFuturo;
                            break;
                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoMercado.Leilao:
                            request.TipoMercado = Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Negocio.TipoMercado.Leilao;
                            break;
                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoMercado.Futuro:
                            request.TipoMercado = Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Negocio.TipoMercado.Futuro;
                            break;
                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoMercado.Estruturado:
                            request.TipoMercado = Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Negocio.TipoMercado.Estruturado;
                            break;
                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoMercado.BOX:
                            request.TipoMercado = Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Negocio.TipoMercado.BOX;
                            break;
                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoMercado.IntegralizacaoResgateCotas:
                            request.TipoMercado = Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Negocio.TipoMercado.IntegralizacaoResgateCotas;
                            break;
                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoMercado.CotasETF:
                            request.TipoMercado = Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Negocio.TipoMercado.CotasETF;
                            break;
                    }
                }

                if (model.TipoOfertaBovespaFix != null)
                {
                    switch (model.TipoOfertaBovespaFix)
                    {
                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoOfertaBovespaFix.AgressorLancador:
                            request.TipoOfertaBovespaFix = Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Negocio.TipoOfertaBovespaFix.AgressorLancador;
                            break;
                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoOfertaBovespaFix.Balcao:
                            request.TipoOfertaBovespaFix = Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Negocio.TipoOfertaBovespaFix.Balcao;
                            break;
                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoOfertaBovespaFix.Direto:
                            request.TipoOfertaBovespaFix = Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Negocio.TipoOfertaBovespaFix.Direto;
                            break;
                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoOfertaBovespaFix.Tomador:
                            request.TipoOfertaBovespaFix = Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Negocio.TipoOfertaBovespaFix.Tomador;
                            break;
                    }
                }

                if (model.TipoOrigem != null)
                {
                    switch (model.TipoOrigem)
                    {
                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoOrigemNegocio.HomeBroker:
                            request.TipoOrigem = Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Negocio.TipoOrigemNegocio.HomeBroker;
                            break;
                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoOrigemNegocio.MegaBolsa:
                            request.TipoOrigem = Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Negocio.TipoOrigemNegocio.MegaBolsa;
                            break;
                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoOrigemNegocio.VivaVoz:
                            request.TipoOrigem = Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Negocio.TipoOrigemNegocio.VivaVoz;
                            break;
                    }
                }

                if (model.TipoTermo != null)
                {
                    switch (model.TipoTermo)
                    {
                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoTermo.AcordoMutuo:
                            request.TipoTermo = Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Negocio.TipoTermo.AcordoMutuo;
                            break;
                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoTermo.VontadeComprador:
                            request.TipoTermo = Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Negocio.TipoTermo.VontadeComprador;
                            break;
                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoTermo.VontadeVendedor:
                            request.TipoTermo = Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Negocio.TipoTermo.VontadeVendedor;
                            break;
                        default:
                            break;
                    }
                }

                request.CodigoTitulo = model.TituloCodigo;
                request.DataPregao = model.DataPregao;
                request.TipoMercado = (Communication.Bovespa.Ordens.Negocio.TipoMercado)ConverterEnumModel(model.Mercado.Value);
                request.FatorValorizacao = model.FatorCotacao;
                request.DiasLiquidacao = model.DiasLiquidacao;
                request.DescricaoTitulo = model.TituloDescricao;
                request.EspecificacaoTitulo = model.TituloEspecificacao;

                request.TituloObjeto = model.TituloObjeto;
                if (model.VencimentoTermoOpcoes != DateTime.MinValue)
                    request.VencimentoOpcoesTermo = model.VencimentoTermoOpcoes;

                request.DataPregao = model.DataPregao;

                if (model.TipoNaturezaOperacao.HasValue)
                {
                    switch (model.TipoNaturezaOperacao)
                    {
                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoNaturezaOperacao.Compra:
                            request.TipoNaturezaOperacao = Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Negocio.TipoNaturezaOperacao.Compra;
                            break;
                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoNaturezaOperacao.Venda:
                            request.TipoNaturezaOperacao = Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Negocio.TipoNaturezaOperacao.Venda;
                            break;
                    }
                }

                if (model.TipoLiquidacaoNegocio.HasValue)
                {
                    switch (model.TipoLiquidacaoNegocio)
                    {
                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoLiquidacaoNegocio.LiquidacaoPeloLiquido:
                            request.TipoLiquidacao = Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Negocio.TipoLiquidacaoNegocio.LiquidacaoPeloLiquido; break;
                        case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoLiquidacaoNegocio.LiquidacaoPeloBruto:
                            request.TipoLiquidacao = Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Ordens.Negocio.TipoLiquidacaoNegocio.LiquidacaoPeloBruto;
                            break;
                    }
                }


                /// Alterado de forma a verificar o sistema chamador
                if (this.ModuleID == "ORD")//20080327 10:10 - Alterado - DMilanez.7Comm
                    response = this._comunnicationNegocio.AlterarNegocioControleOrdens(request);
                else if (this.ModuleID == "BOL")//20080327 10:10 - Alterado - DMilanez.7Comm
                    response = this._comunnicationNegocio.AlterarNegocioFaturamentoBolsas(request);
                else
                    return true;

                modelCadNegocio = ConverterNegocioResponseParaModelCadastroNegocio(response);
                //modelCadNegocio.NegocioArmazenado = true;//20080328 10:36 - Alterado - DMilanez.7Comm



                if (emitirAviso)
                {
                    //this._view.ExibirDadosNegocio(modelCadNegocio);
                    this._view.InformarNegocioAlterado(modelCadNegocio);
                }
            }

            catch (Exception ex)
            {
                retorno = false;
                base.HandleException(ex);
            }
            
            return retorno;
            

        }

        #endregion

        //#region Alterar Negocio Grid

        ///// <summary>
        /////     Alterar Negocio Grid
        ///// 
        ///// </summary>
        ///// <param name="model"></param>
        ///// <user>jrimes</user>
        //public void AlterarNegocio(List<object> lstAlteracao)
        //{
        //    List<ModelCadastroNegocio> lstRetorno = new List<ModelCadastroNegocio>();
        //    try
        //    {
        //        this._comunnicationNegocio = new Negocio();
        //        ModelCadastroNegocio negocioAlterado = null;

        //        //foreach (NegocioResponse item in lstAlteracao)
        //        foreach (ModelCadastroNegocio item in lstAlteracao)
        //        {
        //            lstRetorno.Add(item);

        //            //negocioAlterado.ModuleID = moduleID;//20080327 10:10 - removido - DMilanez.7Comm
        //            AlterarNegocio(negocioAlterado, false);
        //        }
        //    }
        //    catch (ClientException ex)
        //    {
        //        HandleException(ex);
        //        throw;
        //    }
        //    catch (ClientValidationException ex)
        //    {
        //        HandleException(ex);
        //        throw;
        //    }
        //    catch (ClientCommunicationException ex)
        //    {
        //        HandleException(ex);
        //        throw;
        //    }
        //    catch (ClientGeneralException ex)
        //    {
        //        HandleException(ex);
        //        throw;
        //    }
        //    catch (Exception ex)
        //    {
        //        HandleException(ex);
        //        throw;
        //    }

        //    this._view.InformarNegociosAlterados(lstRetorno);
        //}

        //#endregion

        #region Traduzir Enum e Model Tipo Mercado

        /// <summary>
        /// Traduzir Enum Tipo Mercado da Response para Enum da Comum
        /// Renomeado e Alterado de forma a receber um enum como parametro ao inves de um object
        /// </summary>
        /// <param name="item"></param>
        /// <user>Mazevedo</user>
        public T? ConverterEnumCommunication<T>(object item)
            where T : struct
        {
            if (item == null)
                return null;

            if (item.GetType() == typeof(Communication.Bovespa.Ordens.Ordem.TipoMercado) ||
                item.GetType() == typeof(Communication.Bovespa.Ordens.Negocio.TipoMercado))
            {
                return (T)ConverterTipoMercado((Communication.Bovespa.Ordens.Ordem.TipoMercado)item);
            }
            else if (item.GetType() == typeof(Communication.Bovespa.Ordens.Negocio.TipoLiquidacaoNegocio))
            {
                return (T)ConverterTipoLiquidacaoNegocio((Communication.Bovespa.Ordens.Negocio.TipoLiquidacaoNegocio)item);
            }
            else if (item.GetType() == typeof(Communication.Bovespa.Ordens.Negocio.TipoNaturezaOperacao))
            {
                return (T)ConverterTipoNaturezaOperacao((Communication.Bovespa.Ordens.Negocio.TipoNaturezaOperacao)item);
            }
            else if (item.GetType() == typeof(Communication.Bovespa.Ordens.Negocio.TipoTermo))
            {
                return (T)ConverterTipoTermo((Communication.Bovespa.Ordens.Negocio.TipoTermo)item);
            }
            else if (item.GetType() == typeof(Communication.Bovespa.Ordens.Negocio.TipoOrigemNegocio))
            {
                return (T)ConverterTipoOrigemNegocio((Communication.Bovespa.Ordens.Negocio.TipoOrigemNegocio)item);
            }
            else if (item.GetType() == typeof(Communication.Bovespa.Ordens.Negocio.TipoOfertaBovespaFix))
            {
                return (T)ConverterTipoOfertaBovespaFix((Communication.Bovespa.Ordens.Negocio.TipoOfertaBovespaFix)item);
            }
            else if (item.GetType() == typeof(Communication.Bovespa.Ordens.Negocio.TipoEstrategia))
            {
                return (T)ConverterTipoEstrategia((Communication.Bovespa.Ordens.Negocio.TipoEstrategia)item);
            }
            return null;
        }

        private object
            ConverterTipoEstrategia(Communication.Bovespa.Ordens.Negocio.TipoEstrategia item)
        {
            switch (item)
            {
                case Communication.Bovespa.Ordens.Negocio.TipoEstrategia.BOX:
                    return Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoEstrategia.BOX;
                case Communication.Bovespa.Ordens.Negocio.TipoEstrategia.DBX:
                    return Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoEstrategia.DBX;
                case Communication.Bovespa.Ordens.Negocio.TipoEstrategia.Nenhuma:
                    return Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoEstrategia.Nenhuma;
                case Communication.Bovespa.Ordens.Negocio.TipoEstrategia.POP:
                    return Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoEstrategia.POP;

                case Communication.Bovespa.Ordens.Negocio.TipoEstrategia.BTF:
                    return Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoEstrategia.BTF;

                //Estrategia TVR
                case Communication.Bovespa.Ordens.Negocio.TipoEstrategia.TVR:
                    return Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoEstrategia.TVR;
                default:
                    return null;
            }
        }

        private object
            ConverterTipoOfertaBovespaFix(Communication.Bovespa.Ordens.Negocio.TipoOfertaBovespaFix item)
        {
            switch (item)
            {
                case Communication.Bovespa.Ordens.Negocio.TipoOfertaBovespaFix.AgressorLancador:
                    return Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoOfertaBovespaFix.AgressorLancador;
                case Communication.Bovespa.Ordens.Negocio.TipoOfertaBovespaFix.Balcao:
                    return Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoOfertaBovespaFix.Balcao;
                case Communication.Bovespa.Ordens.Negocio.TipoOfertaBovespaFix.Direto:
                    return Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoOfertaBovespaFix.Direto;
                case Communication.Bovespa.Ordens.Negocio.TipoOfertaBovespaFix.Tomador:
                    return Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoOfertaBovespaFix.Tomador;
                default:
                    return null;
            }
        }

        private object ConverterTipoOrigemNegocio(Communication.Bovespa.Ordens.Negocio.TipoOrigemNegocio item)
        {
            switch (item)
            {
                case Communication.Bovespa.Ordens.Negocio.TipoOrigemNegocio.HomeBroker:
                    return Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoOrigemNegocio.HomeBroker;
                case Communication.Bovespa.Ordens.Negocio.TipoOrigemNegocio.MegaBolsa:
                    return Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoOrigemNegocio.MegaBolsa;
                case Communication.Bovespa.Ordens.Negocio.TipoOrigemNegocio.VivaVoz:
                    return Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoOrigemNegocio.VivaVoz;
                default:
                    return null;
            }
        }

        private object
            ConverterTipoTermo(Communication.Bovespa.Ordens.Negocio.TipoTermo item)
        {
            switch (item)
            {
                case Communication.Bovespa.Ordens.Negocio.TipoTermo.AcordoMutuo:
                    return Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoTermo.AcordoMutuo;
                case Communication.Bovespa.Ordens.Negocio.TipoTermo.VontadeComprador:
                    return Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoTermo.VontadeComprador;
                case Communication.Bovespa.Ordens.Negocio.TipoTermo.VontadeVendedor:
                    return Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoTermo.VontadeVendedor;
                default:
                    return null;
            }
        }

        private object
            ConverterTipoNaturezaOperacao(Communication.Bovespa.Ordens.Negocio.TipoNaturezaOperacao item)
        {
            switch (item)
            {
                case Communication.Bovespa.Ordens.Negocio.TipoNaturezaOperacao.Compra:
                    return Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoNaturezaOperacao.Compra;
                case Communication.Bovespa.Ordens.Negocio.TipoNaturezaOperacao.Venda:
                    return Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoNaturezaOperacao.Venda;
                default:
                    return null;
            }
        }

        private object
            ConverterTipoLiquidacaoNegocio(Communication.Bovespa.Ordens.Negocio.TipoLiquidacaoNegocio item)
        {
            switch (item)
            {
                case Communication.Bovespa.Ordens.Negocio.TipoLiquidacaoNegocio.LiquidacaoPeloBruto:
                    return Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoLiquidacaoNegocio.LiquidacaoPeloBruto;
                case Communication.Bovespa.Ordens.Negocio.TipoLiquidacaoNegocio.LiquidacaoPeloLiquido:
                    return Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoLiquidacaoNegocio.LiquidacaoPeloLiquido;
                default:
                    return null;
            }
        }

        private object
            ConverterTipoMercado(Communication.Bovespa.Ordens.Ordem.TipoMercado item)
        {
            switch (item)
            {
                case Communication.Bovespa.Ordens.Ordem.TipoMercado.BOX:
                    return Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoMercado.BOX;
                case Communication.Bovespa.Ordens.Ordem.TipoMercado.Vista:
                    return Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoMercado.Vista;
                case Communication.Bovespa.Ordens.Ordem.TipoMercado.OpcaoCompra:
                    return Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoMercado.OpcaoCompra;
                case Communication.Bovespa.Ordens.Ordem.TipoMercado.OpcaoVenda:
                    return Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoMercado.OpcaoVenda;
                case Communication.Bovespa.Ordens.Ordem.TipoMercado.ExercicioOpcaoCompra:
                    return Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoMercado.ExercicioOpcaoCompra;
                case Communication.Bovespa.Ordens.Ordem.TipoMercado.ExercicioOpcaoVenda:
                    return Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoMercado.ExercicioOpcaoVenda;
                case Communication.Bovespa.Ordens.Ordem.TipoMercado.Fracionario:
                    return Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoMercado.Fracionario;
                case Communication.Bovespa.Ordens.Ordem.TipoMercado.Estruturado:
                    return Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoMercado.Estruturado;
                case Communication.Bovespa.Ordens.Ordem.TipoMercado.Leilao:
                    return Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoMercado.Leilao;
                case Communication.Bovespa.Ordens.Ordem.TipoMercado.Termo:
                    return Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoMercado.Termo;
                case Communication.Bovespa.Ordens.Ordem.TipoMercado.LeilaoNaoCotados:
                    return Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoMercado.LeilaoNaoCotados;
                case Communication.Bovespa.Ordens.Ordem.TipoMercado.Futuro:
                    return Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoMercado.Futuro;
                case Communication.Bovespa.Ordens.Ordem.TipoMercado.VencimentoFuturo:
                    return Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoMercado.VencimentoFuturo;
                case Communication.Bovespa.Ordens.Ordem.TipoMercado.IntegralizacaoResgateCotas:
                    return Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoMercado.IntegralizacaoResgateCotas;
                case Communication.Bovespa.Ordens.Ordem.TipoMercado.CotasETF:
                    return Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoMercado.CotasETF;
                default:
                    return null;
            }
        }

        /// <summary>
        /// Traduzir o valor da Model para o Tipo Enum Mercado do Response
        /// Renomeado e Alterado de forma a retornar um enum ao inves de um object
        /// </summary>
        /// <param name="item"></param>
        /// <user>Mazevedo</user>
        public object ConverterEnumModel(Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoMercado? item)
        {
            return ConverterEnumModel(item.Value);
        }
        public object ConverterEnumModel(Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoMercado item)
        {
            switch (item)
            {
                case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoMercado.BOX:
                    return Communication.Bovespa.Ordens.Negocio.TipoMercado.BOX;
                case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoMercado.Vista:
                    return Communication.Bovespa.Ordens.Negocio.TipoMercado.Vista;
                case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoMercado.OpcaoCompra:
                    return Communication.Bovespa.Ordens.Negocio.TipoMercado.OpcaoCompra;
                case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoMercado.OpcaoVenda:
                    return Communication.Bovespa.Ordens.Negocio.TipoMercado.OpcaoVenda;
                case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoMercado.ExercicioOpcaoCompra:
                    return Communication.Bovespa.Ordens.Negocio.TipoMercado.ExercicioOpcaoCompra;
                case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoMercado.ExercicioOpcaoVenda:
                    return Communication.Bovespa.Ordens.Negocio.TipoMercado.ExercicioOpcaoVenda;
                case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoMercado.Fracionario:
                    return Communication.Bovespa.Ordens.Negocio.TipoMercado.Fracionario;
                case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoMercado.Estruturado:
                    return Communication.Bovespa.Ordens.Negocio.TipoMercado.Estruturado;
                case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoMercado.Leilao:
                    return Communication.Bovespa.Ordens.Negocio.TipoMercado.Leilao;
                case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoMercado.Termo:
                    return Communication.Bovespa.Ordens.Negocio.TipoMercado.Termo;
                case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoMercado.LeilaoNaoCotados:
                    return Communication.Bovespa.Ordens.Negocio.TipoMercado.LeilaoNaoCotados;
                case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoMercado.Futuro:
                    return Communication.Bovespa.Ordens.Negocio.TipoMercado.Futuro;
                case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoMercado.VencimentoFuturo:
                    return Communication.Bovespa.Ordens.Negocio.TipoMercado.VencimentoFuturo;
                case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoMercado.IntegralizacaoResgateCotas:
                    return Communication.Bovespa.Ordens.Negocio.TipoMercado.IntegralizacaoResgateCotas;
                case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoMercado.CotasETF:
                    return Communication.Bovespa.Ordens.Negocio.TipoMercado.CotasETF;
                default:
                    return null;
            }
        }

        private object
            ConverterEnumModel(Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoNaturezaOperacao? item)
        {
            return ConverterEnumModel(item.Value);
        }
        private object
            ConverterEnumModel(Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoNaturezaOperacao item)
        {
            switch (item)
            {
                case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoNaturezaOperacao.Compra:
                    return Communication.Bovespa.Ordens.Negocio.TipoNaturezaOperacao.Compra;
                case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoNaturezaOperacao.Venda:
                    return Communication.Bovespa.Ordens.Negocio.TipoNaturezaOperacao.Venda;
                default:
                    return null;
            }
        }

        private object
            ConverterEnumModel(Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoLiquidacaoNegocio? item)
        {
            return ConverterEnumModel(item.Value);
        }

        private object
            ConverterEnumModel(Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoLiquidacaoNegocio item)
        {
            switch (item)
            {
                case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoLiquidacaoNegocio.LiquidacaoPeloBruto:
                    return Communication.Bovespa.Ordens.Negocio.TipoLiquidacaoNegocio.LiquidacaoPeloBruto;
                case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoLiquidacaoNegocio.LiquidacaoPeloLiquido:
                    return Communication.Bovespa.Ordens.Negocio.TipoLiquidacaoNegocio.LiquidacaoPeloLiquido;
                default:
                    return null;
            }
        }

        private object
            ConverterEnumModel(Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoTermo? item)
        {
            return ConverterEnumModel(item.Value);
        }

        private object
            ConverterEnumModel(Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoTermo item)
        {
            switch (item)
            {
                case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoTermo.AcordoMutuo:
                    return Communication.Bovespa.Ordens.Negocio.TipoTermo.AcordoMutuo;
                case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoTermo.VontadeComprador:
                    return Communication.Bovespa.Ordens.Negocio.TipoTermo.VontadeComprador;
                case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoTermo.VontadeVendedor:
                    return Communication.Bovespa.Ordens.Negocio.TipoTermo.VontadeVendedor;
                default:
                    return null;
            }
        }

        private object
            ConverterEnumModel(Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoOrigemNegocio? item)
        {
            return ConverterEnumModel(item.Value);
        }

        private object
            ConverterEnumModel(Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoOrigemNegocio item)
        {
            switch (item)
            {
                case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoOrigemNegocio.HomeBroker:
                    return Communication.Bovespa.Ordens.Negocio.TipoOrigemNegocio.HomeBroker;
                case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoOrigemNegocio.MegaBolsa:
                    return Communication.Bovespa.Ordens.Negocio.TipoOrigemNegocio.MegaBolsa;
                case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoOrigemNegocio.VivaVoz:
                    return Communication.Bovespa.Ordens.Negocio.TipoOrigemNegocio.VivaVoz;
                default:
                    return null;
            }
        }

        private object
            ConverterEnumModel(Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoOfertaBovespaFix? item)
        {
            return ConverterEnumModel(item.Value);
        }

        private object
            ConverterEnumModel(Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoOfertaBovespaFix item)
        {
            switch (item)
            {
                case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoOfertaBovespaFix.AgressorLancador:
                    return Communication.Bovespa.Ordens.Negocio.TipoOfertaBovespaFix.AgressorLancador;
                case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoOfertaBovespaFix.Balcao:
                    return Communication.Bovespa.Ordens.Negocio.TipoOfertaBovespaFix.Balcao;
                case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoOfertaBovespaFix.Direto:
                    return Communication.Bovespa.Ordens.Negocio.TipoOfertaBovespaFix.Direto;
                case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoOfertaBovespaFix.Tomador:
                    return Communication.Bovespa.Ordens.Negocio.TipoOfertaBovespaFix.Tomador;
                default:
                    return null;
            }
        }

        private object
            ConverterEnumModel(Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoEstrategia? item)
        {
            return ConverterEnumModel(item.Value);
        }
        private object
            ConverterEnumModel(Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoEstrategia item)
        {
            switch (item)
            {
                case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoEstrategia.BOX:
                    return Communication.Bovespa.Ordens.Negocio.TipoEstrategia.BOX;
                case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoEstrategia.DBX:
                    return Communication.Bovespa.Ordens.Negocio.TipoEstrategia.DBX;
                case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoEstrategia.Nenhuma:
                    return Communication.Bovespa.Ordens.Negocio.TipoEstrategia.Nenhuma;
                case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoEstrategia.POP:
                    return Communication.Bovespa.Ordens.Negocio.TipoEstrategia.POP;

                case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoEstrategia.BTF:
                    return Communication.Bovespa.Ordens.Negocio.TipoEstrategia.BTF;
                
                //Estrategia TVR
                case Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoEstrategia.TVR:
                    return Communication.Bovespa.Ordens.Negocio.TipoEstrategia.TVR;
                default:
                    return null;
            }
        }
        #endregion

        #endregion

        #region Converter Negocio Response para CadastramentoNegocio (Model)
        /// <summary>
        /// </summary>
        /// <param name="negocioResponse"></param>
        /// <returns></returns>
        private ModelCadastroNegocio ConverterNegocioResponseParaModelCadastroNegocio(NegocioResponse negocioResponse)
        {
            ModelCadastroNegocio modelCadastroNegocio = null;

            if (negocioResponse != null)
            {
                modelCadastroNegocio = new ModelCadastroNegocio();
                modelCadastroNegocio.Bolsa = negocioResponse.Bolsa;
                modelCadastroNegocio.CodigoCorrespondente = negocioResponse.CodigoCorrespondente;
                modelCadastroNegocio.ContraParte = negocioResponse.ContraParte;
                modelCadastroNegocio.DataMovimento = negocioResponse.DataMovimento;
                modelCadastroNegocio.DataPregao = negocioResponse.DataPregao;
                modelCadastroNegocio.DiasLiquidacao = negocioResponse.DiasLiquidacao;
                modelCadastroNegocio.FatorCotacao = Convert.ToInt32(negocioResponse.FatorValorizacao);//20080412 13:27 - Alterado - DMilanez.7Comm
                modelCadastroNegocio.HoraNegocio = negocioResponse.HoraNegocio;

                if (negocioResponse.TipoMercado.HasValue)
                    modelCadastroNegocio.Mercado = ConverterEnumCommunication<Model.Enum.TipoMercado>(negocioResponse.TipoMercado);

                modelCadastroNegocio.NaoLiquidaNota = negocioResponse.NaoLiquidaNota.Value;
                modelCadastroNegocio.NegociadoAfterMarket = negocioResponse.NegociadoAfterMarket.Value;
                modelCadastroNegocio.Numero = negocioResponse.NumeroNegocio;
                modelCadastroNegocio.NumeroDigito = negocioResponse.DigitoNegocio;
                modelCadastroNegocio.Observacao = negocioResponse.Observacao;
                modelCadastroNegocio.TituloObjeto = negocioResponse.TituloObjeto;
                modelCadastroNegocio.PercentualCorrespondente = negocioResponse.PercentualCorrespondente;
                modelCadastroNegocio.PontaGeradoraOferta = negocioResponse.PontaGeradoraOferta.Value;
                modelCadastroNegocio.PrazoTermo = negocioResponse.PrazoTermo;
                modelCadastroNegocio.Preco = negocioResponse.Preco;
                modelCadastroNegocio.Quantidade = negocioResponse.Quantidade;

                if (negocioResponse.Estrategia.HasValue)
                    modelCadastroNegocio.TipoEstrategia = ConverterEnumCommunication<Model.Enum.TipoEstrategia>(negocioResponse.Estrategia);

                if (negocioResponse.TipoLiquidacao.HasValue)
                    modelCadastroNegocio.TipoLiquidacaoNegocio = ConverterEnumCommunication<Model.Enum.TipoLiquidacaoNegocio>(negocioResponse.TipoLiquidacao);

                if (negocioResponse.TipoNaturezaOperacao.HasValue)
                    modelCadastroNegocio.TipoNaturezaOperacao = ConverterEnumCommunication<Model.Enum.TipoNaturezaOperacao>(negocioResponse.TipoNaturezaOperacao);

                if (negocioResponse.TipoOfertaBovespaFix.HasValue)
                    modelCadastroNegocio.TipoOfertaBovespaFix = ConverterEnumCommunication<Model.Enum.TipoOfertaBovespaFix>(negocioResponse.TipoOfertaBovespaFix);

                if (negocioResponse.TipoOrigem.HasValue)
                    modelCadastroNegocio.TipoOrigem = ConverterEnumCommunication<Model.Enum.TipoOrigemNegocio>(negocioResponse.TipoOrigem);

                if (negocioResponse.TipoTermo.HasValue)
                    modelCadastroNegocio.TipoTermo = (Model.Enum.TipoTermo)negocioResponse.TipoTermo;

                if (negocioResponse.Titulo != null)
                {
                    modelCadastroNegocio.TituloCodigo = negocioResponse.Titulo.Codigo;
                    modelCadastroNegocio.TituloDescricao = negocioResponse.Titulo.Descricao;
                    modelCadastroNegocio.TituloEspecificacao = negocioResponse.Titulo.Especificacao;
                }

                modelCadastroNegocio.VencimentoTermoOpcoes = negocioResponse.VencimentoOpcoesTermo;
            }

            return modelCadastroNegocio;
        }
        #endregion

        #region Consultar Operador
        public void CarregarNomeOperador()
        {
            try
            {
                this._communicationOperador = new Sinacor.UI.Bovespa.Ordens.Communication.Operador(this.Session);
                ModelCollection<Model.Operador> response = this._communicationOperador.ConsultarOperador();

                if (response != null)
                {
                    string loginOperador = Session.UserName;
                    foreach (Model.Operador operador in response)
                    {
                        if (operador.LoginOperador == loginOperador)
                        {
                            this._view.ExibirNomeOperador(operador.NomeOperador);
                            return;
                        }
                    }
                }
            }

            catch (Exception ex)
            {
                HandleException(ex);
                throw;
            }
        }
        #endregion

        #region Comparar Model Cadastro Negocio
        /// Data:27/03/2008 11:26
        /// Autor:DMilanez.7Comm
        /// Obs: Metodo responsavel por comparar dois objetos ModelCadastroNegocio
        /// TODO: analisar se convem Codificar utilizando reflection
        public bool CompararNegocios(ModelCadastroNegocio negocioA, ModelCadastroNegocio negocioB, bool ignorarDataPregaMovimento)
        {
            return
                CompararStrings(negocioA.Bolsa, negocioB.Bolsa) &&
                negocioA.CodigoCorrespondente == negocioB.CodigoCorrespondente &&
                negocioA.ContraParte == negocioB.ContraParte &&
                (ignorarDataPregaMovimento ||
                 negocioA.DataMovimento == negocioB.DataMovimento &&
                 negocioA.DataPregao == negocioB.DataPregao
                ) &&
                CompararDadosDiasLiquidacao(negocioA.DiasLiquidacao, negocioB.DiasLiquidacao) &&
                negocioA.FatorCotacao == negocioB.FatorCotacao &&
                CompararHoras(negocioA.HoraNegocio, negocioB.HoraNegocio) &&
                negocioA.Mercado == negocioB.Mercado &&
                negocioA.NaoLiquidaNota == negocioB.NaoLiquidaNota &&
                negocioA.NegociadoAfterMarket == negocioB.NegociadoAfterMarket &&
                negocioA.Numero == negocioB.Numero &&
                negocioA.NumeroDigito == negocioB.NumeroDigito &&
                CompararStrings(negocioA.Observacao, negocioB.Observacao) &&
                negocioA.PercentualCorrespondente == negocioB.PercentualCorrespondente &&
                negocioA.PontaGeradoraOferta == negocioB.PontaGeradoraOferta &&
                negocioA.PrazoTermo == negocioB.PrazoTermo &&
                negocioA.Preco == negocioB.Preco &&
                negocioA.Quantidade == negocioB.Quantidade &&
                negocioA.TipoEstrategia == negocioB.TipoEstrategia && //20080424 16:44 - Alterado - DMilanez.7Comm
                negocioA.TipoLiquidacaoNegocio == negocioB.TipoLiquidacaoNegocio &&
                negocioA.TipoNaturezaOperacao == negocioB.TipoNaturezaOperacao &&
                negocioA.TipoOfertaBovespaFix == negocioB.TipoOfertaBovespaFix &&
                negocioA.TipoOrigem == negocioB.TipoOrigem &&
                negocioA.TipoTermo == ((negocioB.TipoTermo == null) ? Model.Enum.TipoTermo.Nenhum : negocioB.TipoTermo) &&
                CompararStrings(negocioA.TituloCodigo, negocioB.TituloCodigo) &&
                CompararStrings(negocioA.TituloDescricao, negocioB.TituloDescricao) &&
                CompararStrings(negocioA.TituloEspecificacao, negocioB.TituloEspecificacao) &&
                CompararObjetos(negocioA.TituloObjeto, negocioB.TituloObjeto) &&
                negocioA.VencimentoTermoOpcoes == negocioB.VencimentoTermoOpcoes;

        }

        private bool CompararDadosDiasLiquidacao(int? a, int? b)
        {
            a = (a == null) ? 0 : a;
            b = (b == null) ? 0 : b;

            return (a == b);
        }



        private bool CompararObjetos(string p, string p2)
        {
            p = (p == null) ? " " : p;
            p2 = (p2 == null) ? " " : p2;

            return (p.Trim() == p2.Trim());
        }



        private bool CompararStrings(string a, string b)
        {

            return ((a == b) || (String.IsNullOrEmpty(a) && String.IsNullOrEmpty(b)));
        }

        /// Data:21/04/2008 13:06
        /// Autor:DMilanez.7Comm
        /// Obs: Comparar duas horas, considerando apenas hora e minuto
        private bool CompararHoras(DateTime? horaA, DateTime? horaB)
        {
            string sHoraA, sHoraB;

            sHoraA = horaA.HasValue ? horaA.Value.Hour.ToString() + ":" + horaA.Value.Minute.ToString() : null;
            sHoraB = horaB.HasValue ? horaB.Value.Hour.ToString() + ":" + horaB.Value.Minute.ToString() : null;

            return (sHoraA == sHoraB);
        }

        ////20080419 11:42 - Alterado - DMilanez.7Comm
        //private bool CompararEstrategias(Model.TipoEstrategia? a, Model.TipoEstrategia? b)
        //{
        //    return ((a == b) || ((a == Model.TipoEstrategia.Nenhuma && !b.HasValue) || (!a.HasValue && b == Model.TipoEstrategia.Nenhuma)));              
        //}
        #endregion

        #region CarregarCorrespondente
        /// Data:20/04/2008 18:42
        /// Autor:DMilanez.7Comm
        /// Obs:
        public void CarregarCorrespondente(Sinacor.UI.Bovespa.Clientes.Model.Correspondente request)
        {
            if (request == null)
            {
                this._view.ExibirCorrespondente(null);
                return;
            }

            Sinacor.UI.Bovespa.Clientes.Model.Correspondente response = null;
            try
            {
                this._communicationCliente = new Clientes.Communication.Cliente(this.Session);
                response = this._communicationCliente.ConsultarCorrespondente(request);
            }

            catch (Exception ex)
            {
                HandleException(ex);
            }

            if (response != null)
            {
                this._view.ExibirCorrespondente(response);
            }
            else
            {
                this._view.InformarCorrespondenteNaoEncontrado();
            }
        }
        #endregion
    }
}
